using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._IndoorsTools
{
    /// <summary>
    /// <para>Import BIM To Indoor Dataset</para>
    /// <para>Imports features from a BIM file into an indoor dataset.</para>
    /// <para>将要素从 BIM 文件导入到室内数据集中。</para>
    /// </summary>    
    [DisplayName("Import BIM To Indoor Dataset")]
    public class ImportBIMToIndoorDataset : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ImportBIMToIndoorDataset()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_bim_floorplan_layer">
        /// <para>Input BIM Floorplan Polygon Layer</para>
        /// <para>The Floorplan_Polygon feature layer from the source BIM file that has been added to the current map.</para>
        /// <para>已添加到当前地图的源 BIM 文件中的Floorplan_Polygon要素图层。</para>
        /// </param>
        /// <param name="_target_indoor_dataset">
        /// <para>Target Indoor Dataset</para>
        /// <para>The target indoor dataset that conforms to the ArcGIS Indoors Information Model and contains Facilities, Levels, Units, and Details feature classes.</para>
        /// <para>符合 ArcGIS Indoors 信息模型并包含设施点、楼层、单位和细节要素类的目标室内数据集。</para>
        /// </param>
        /// <param name="_ground_floor_name">
        /// <para>Ground Floor Name</para>
        /// <para>The ground floor of the building. The vertical order of the levels is derived from this input. Any levels with an elevation that is less than the specified ground floor will be assigned a negative vertical order.</para>
        /// <para>大楼的一楼。级别的垂直顺序是从此输入派生的。任何标高小于指定底层的楼层都将被分配一个负垂直阶数。</para>
        /// </param>
        public ImportBIMToIndoorDataset(object _in_bim_floorplan_layer, object _target_indoor_dataset, object _ground_floor_name)
        {
            this._in_bim_floorplan_layer = _in_bim_floorplan_layer;
            this._target_indoor_dataset = _target_indoor_dataset;
            this._ground_floor_name = _ground_floor_name;
        }
        public override string ToolboxName => "Indoors Tools";

        public override string ToolName => "Import BIM To Indoor Dataset";

        public override string CallName => "indoors.ImportBIMToIndoorDataset";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_in_bim_floorplan_layer, _target_indoor_dataset, _ground_floor_name, _building_name, _room_category_field, _floors_to_import, _area_unit_of_measure.GetGPValue(), _updated_indoor_dataset];

        /// <summary>
        /// <para>Input BIM Floorplan Polygon Layer</para>
        /// <para>The Floorplan_Polygon feature layer from the source BIM file that has been added to the current map.</para>
        /// <para>已添加到当前地图的源 BIM 文件中的Floorplan_Polygon要素图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input BIM Floorplan Polygon Layer")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_bim_floorplan_layer { get; set; }


        /// <summary>
        /// <para>Target Indoor Dataset</para>
        /// <para>The target indoor dataset that conforms to the ArcGIS Indoors Information Model and contains Facilities, Levels, Units, and Details feature classes.</para>
        /// <para>符合 ArcGIS Indoors 信息模型并包含设施点、楼层、单位和细节要素类的目标室内数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Target Indoor Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _target_indoor_dataset { get; set; }


        /// <summary>
        /// <para>Ground Floor Name</para>
        /// <para>The ground floor of the building. The vertical order of the levels is derived from this input. Any levels with an elevation that is less than the specified ground floor will be assigned a negative vertical order.</para>
        /// <para>大楼的一楼。级别的垂直顺序是从此输入派生的。任何标高小于指定底层的楼层都将被分配一个负垂直阶数。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Ground Floor Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _ground_floor_name { get; set; }


        /// <summary>
        /// <para>Building Name</para>
        /// <para>The unique building name that will be assigned to the output Indoors features. The default value is the Bldg_Name field value from the input BIM file. If the field is null or empty, this parameter will be populated with the name of the input source file.</para>
        /// <para>将分配给输出 Indoors 要素的唯一建筑名称。默认值为输入 BIM 文件中的Bldg_Name字段值。如果该字段为 null 或空，则此参数将填充输入源文件的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Building Name")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _building_name { get; set; } = null;


        /// <summary>
        /// <para>Room Category Field</para>
        /// <para>The field from the Floorplan_Polygon feature layer that will be used to populate the USE_TYPE field for the Units feature class in the target indoor dataset. If no field is provided, the RoomName field value from the Floorplan_Polygon layer will be used.</para>
        /// <para>Floorplan_Polygon要素图层中的字段，将用于填充目标室内数据集中 Units 要素类的 USE_TYPE 字段。如果未提供任何字段，则将使用 Floorplan_Polygon 图层中的 RoomName 字段值。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Room Category Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _room_category_field { get; set; } = null;


        /// <summary>
        /// <para>Floors To Import</para>
        /// <para>The floors in the input BIM file that will be imported to the target indoor dataset. If no floors are provided, all floors will be imported.</para>
        /// <para>输入 BIM 文件中将导入到目标室内数据集的楼层。如果未提供楼层，则将导入所有楼层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Floors To Import")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _floors_to_import { get; set; } = null;


        /// <summary>
        /// <para>Area Unit of Measure</para>
        /// <para><xdoc>
        ///   <para>Specifies the unit of measure that will be used for the area fields in the Levels and Units feature classes.</para>
        ///   <bulletList>
        ///     <bullet_item>Square Meters—The area unit will be square meters.</bullet_item><para/>
        ///     <bullet_item>Square Feet—The area unit will be square feet. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将用于“级别”和“单位”要素类中的面积字段的度量单位。</para>
        ///   <bulletList>
        ///     <bullet_item>平方米—面积单位将为平方米。</bullet_item><para/>
        ///     <bullet_item>平方英尺—面积单位将为平方英尺。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Area Unit of Measure")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _area_unit_of_measure_value _area_unit_of_measure { get; set; } = _area_unit_of_measure_value._SQUARE_FEET;

        public enum _area_unit_of_measure_value
        {
            /// <summary>
            /// <para>Square Meters</para>
            /// <para>Square Meters—The area unit will be square meters.</para>
            /// <para>平方米—面积单位将为平方米。</para>
            /// </summary>
            [Description("Square Meters")]
            [GPEnumValue("SQUARE_METERS")]
            _SQUARE_METERS,

            /// <summary>
            /// <para>Square Feet</para>
            /// <para>Square Feet—The area unit will be square feet. This is the default.</para>
            /// <para>平方英尺—面积单位将为平方英尺。这是默认设置。</para>
            /// </summary>
            [Description("Square Feet")]
            [GPEnumValue("SQUARE_FEET")]
            _SQUARE_FEET,

        }

        /// <summary>
        /// <para>Updated Indoor Dataset</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Indoor Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _updated_indoor_dataset { get; set; }


        public ImportBIMToIndoorDataset SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}